Linux 术语中上游和下游到底在说什么?
点击上方蓝字关注 👆👆
上游 和 下游 是相当模糊的术语。
我认为,公众并没有真正使用过。如果您是 Linux 用户并且不编写或维护软件,那么这些术语很可能对您毫无意义,但它们可以指导 Linux 世界中的组之间的通信如何工作。
这些术语用于网络、编程、内核,甚至在供应链等非计算机领域。当我们谈论上游和下游时,上下文很重要。
在最简单的形式中,上游和下游是信息流的方向。
由于我们都在连接到 Internet 时阅读本文,因此让我们看一个适用于 Internet 服务提供商 (ISP) 的上游/下游示例。在这里,ISP 关心的是流量。上游流量是来自不同 ISP 的用户的数据。
例如,如果您有一个网站提供订阅时事通讯,那么我发送的订阅信息就是上游数据。
下游流量是从一个用户发送到不同 ISP 的另一个用户的数据,然后将其视为下游流量。使用相同的订阅示例,假设我的订阅请求已获批准,并且我在一封电子邮件中收到“欢迎”通知,在另一封电子邮件中收到最新的时事通讯。在这种情况下,数据是下游的,因为它是由您(可能是作为您的代表运行的自动化软件)发送给来自不同 ISP 的用户的我。
总结:我需要或想要的东西(你的时事通讯)在上游。你提供给我的东西(欢迎信和实际时事通讯)会在下游传给我。
数据是上游还是下游对于我们作为用户来说可能并不重要,但对于监控带宽使用的服务器管理员以及分销商和应用程序程序员来说却很重要。
在 Linux 世界中,上游和下游有两个主要的上下文。一个与内核有关,另一个与应用程序有关。
还有其他的,但我希望我能通过这两个来理解这个想法。
Linux 内核上下文中的上游和下游
Linux 是内核。在创建发行版(通常称为“发行版”)时,Linux 发行版最初使用来自未修改内核的源代码。添加必要的补丁,然后配置内核。内核的配置基于发行版想要提供的特性和选项。一旦决定,内核就会相应地创建。
原始内核位于发行版的上游。当分发获得源代码时,它会向下游流动。一旦发行版有了代码,它就会在发行版的制造商那里完成工作。作为用户,它仍然在我们上游,直到它准备好发布。
发行版创建的内核版本将添加补丁并启用某些功能和选项。此配置由发行版构建器确定。这就是为什么有多种 Linux 风格的原因: 例如, Debian[1] 与 Red Hat[2]。发行版的构建者决定提供给他们的用户群的选项,并相应地编译内核。
一旦这项工作完成,它就可以在存储库中发布,我们可以获取一个副本。该副本向下游流向我们。
同样,如果分销商发现内核中的错误,则对其进行修复,然后将补丁发送给内核开发人员,以便他们可以为下游的每个人修补内核。这被称为对上游的贡献,因为这里的流量向上流向原始源。
应用程序上下文中的上游和下游
同样,从技术上讲,Linux 是内核,其他一切都是附加软件。发行版构建器还为他们的项目添加了额外的软件。在这种情况下,有几个上游。发行版可以包含任意数量的应用程序,例如 X、KDE、Gnome 等。
假设您正在使用 nano[3] 编辑器并发现它无法正常工作,因此您向分销商提交了错误报告。开发发行版的程序员会查看它,如果他们发现他们在 nano 中插入了一个错误,他们将修复它并在他们的存储库中提供一个新版本。如果他们发现他们没有制造错误,分发者将向纳米程序员上游提交错误报告。
当涉及到诸如错误报告、功能请求等之类的事情时,最好将它们发送给您的分销商,因为他们会为您正在使用的发行版维护内核和其他应用程序。例如,我使用一个名为 在几台机器上使用了一个名为Q4OS 的发行版。[4]如果我在程序中发现错误,我会向 Q4OS 人员报告。如果您碰巧在使用 Mint[5],您可以将其报告给 Mint 项目。
例如,如果您在通用 Linux 板上发布问题,并且提到您正在使用 Mint,您肯定会收到类似以下内容的回复:“这在 Mint 论坛中处理得更好。” 使用前面的“nano bug”示例,Mint 程序员可能对 nano 进行了更改,以使其在他们的发行版中更好地工作。如果他们确实犯了错误,他们会想知道它,并且在犯了错误之后,他们将是修复它的人。
修复后,更新后的程序将放入可供您使用的存储库中。当您获得更新时,它会在下游传给您,如下所示:
如果发行商进行了修复,则新版本会在发行版存储库中提供 如果应用程序的程序员进行了修复,它会被发送到下游测试新代码的分销商。一旦发现它工作正常,它就会被放置在存储库中,以向下游流向您
自动顺流
曾经有一段时间,用户必须自己获取更新。用户将获得更新的源代码并编译新的可执行文件。随着时间的推移,创建了 apt 等实用程序,以允许用户从存储库中提取更新的二进制文件(可执行文件)。apt 程序是 Debian,但其他发行版也有自己的类似程序。
像 apt 这样的程序负责上游/下游工作。如果您像这样使用升级选项运行 apt:
sudo apt upgrade
它会(上游)查看发行版存储库,找到任何需要的更新包并将它们(下游)拉到您的机器上并安装它们。
一些发行版更进一步。发行版程序员和维护者总是在检查他们的产品。很多时候,应用程序员会改进他们的程序。系统库经常更新,安全漏洞被堵住等等。这些更新提供给分销商,然后他们在发行版的存储库中提供新版本。
有些发行版不会让您每天都运行 apt,而是会提醒您可用的更新并询问您是否需要它们。如果您愿意,只需接受,更新将被发送到您的计算机并安装。
结论
上下游其实只是数据流的方向。该数据流向上游或下游多远取决于最终需要谁处理它。基本上,程序员在上游,用户在下游。
同样,作为用户,我们真的不需要担心这些术语,但是这些概念确实有助于软件的开发和维护。通过能够将工作定向到适当的组,可以避免重复工作。它还确保维护一个标准。例如,Chrome 浏览器可能需要对其进行轻微更改才能在某个发行版上运行,但它的核心是 Chrome~它的外观和行为都像 Chrome。
如果您确实发现发行版中的任何程序存在错误,只需将其报告给发行版的维护人员,这通常是通过他们的网站完成的。您将向上游发送报告给他们,但您是否记得您正在向上游发送报告并不重要。
翻译自
Linux Jargon Buster: What are Upstream and Downstream?[6]
推荐阅读
什么是反向 DNS?使用场景是什么?如何反向DNS查找,怎样配置?
👇扫码关注,更多好文第一时间收到👇